package mario
{
	// ========================================================================
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
	
	import kapi.utiles.Arreglos;
	// ========================================================================

	public class Mario implements IEventDispatcher
	{
		// ====================================================================
		static public const IR_A_LA_IZQUIERDA:String = 'izquierda'
		static public const IR_A_LA_DERECHA:String = 'derecha'
		static public const SALTAR:String = 'saltar'
		static public const AGACHAR:String = 'agacharse'
		static public const TRANSFORMAR:String = 'transformarse'
		static public const ACCIONAR:String = 'accionar'

		private var eventosValidos:Array = [
			IZQUIERDA,
			DERECHA,
			SALTAR,
			AGACHAR,
			TRANSFORMAR,
			ACCIONAR
		]

		private var despachador:EventDispatcher
		// ====================================================================

		// ====================================================================
		// CONSTRUCTOR
		// ====================================================================

		// --------------------------------------------------------------------
		public function Mario()
		{
			despachador = new EventDispatcher(this)
		}

		// ====================================================================
		// FUNCIONES
		// ====================================================================

		// --------------------------------------------------------------------
		public function addEventListener(
			type:String,
			listener:Function,
			useCapture:Boolean=false,
			priority:int=0,
			useWeakReference:Boolean=false
		):void
		{
			despachador.addEventListener(
				type,
				listener,
				useCapture,
				priority, 
				useWeakReference
			)
		}
		// --------------------------------------------------------------------
		public function removeEventListener(
			type:String,
			listener:Function,
			useCapture:Boolean=false
		):void
		{
			despachador.removeEventListener(
				type,
				listener,
				useCapture
			)
		}
		// --------------------------------------------------------------------
		public function dispatchEvent(event:Event):Boolean
		{
			if (Arreglos.contiene(eventosValidos, event.type))
				return despachador.dispatchEvent(event)
			return false
		}
		// --------------------------------------------------------------------
		public function hasEventListener(type:String):Boolean
		{
			return despachador.hasEventListener(type)
		}
		// --------------------------------------------------------------------
		public function willTrigger(type:String):Boolean
		{
			return despachador.willTrigger(type)
		}
	}
}